package com.chris.code.generate.vue;

import com.chris.assist.builders.vue.supports.VueBuildManager;
import com.chris.assist.builders.vue.supports.VueBuildParams;
import com.chris.assist.common.templates.ResourceMode;
import com.chris.assist.common.templates.VueTemplatePaths;
import com.chris.assist.config.Config;
import com.chris.assist.velocity.TemplateParam;
import com.chris.code.generate.manager.CustomFileResourceManager;
import com.chris.code.generate.manager.LocalTestConfigBuilder;

/**
 * @author Chris Chan
 * Create On 2025/9/26 下午2:51
 * Use for: Vue路由表资源创建示例
 * Explain:
 */
public class VueBuildTest {
    private static final String templateRootPath = "G:\\Dev\\products\\dragon-models\\models\\projects\\pear\\assist\\templates2\\vue";
    private static final String tablePrefix = "ofd_";
    private static final VueTemplatePaths templatePaths = CustomFileResourceManager.getVue();

    public static void main(String[] args) {
        // 1. 获取配置
        Config config = LocalTestConfigBuilder.create().get();
        // 2. 创建管理器 3. 并创建
        createAllWithDefault(config);
    }

    /**
     * 构建type资源
     * 使用默认模板创建
     *
     * @param config
     */
    private static void createTypesWithDefault(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createTypes();
    }

    /**
     * 构建type资源
     * 使用自定义模板创建
     *
     * @param config
     */
    private static void createTypes(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createTypes(VueBuildParams.of()
                        .setTemplateParam(
                                TemplateParam.of()
                                        .setMode(ResourceMode.FILE)
                                        .setRootPath(templateRootPath)
                                        .setResourcePath(templatePaths.type)
                        ));
    }

    /**
     * 构建api接口调用资源
     * 使用默认模板创建
     *
     * @param config
     */
    private static void createApisWithDefault(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createApis();
    }

    /**
     * 构建api接口调用资源
     * 使用自定义模板创建
     *
     * @param config
     */
    private static void createApis(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createApis(VueBuildParams.of()
                        .setTemplateParam(
                                TemplateParam.of()
                                        .setMode(ResourceMode.FILE)
                                        .setRootPath(templateRootPath)
                                        .setResourcePath(templatePaths.apis)
                        ));
    }

    /**
     * 构建页面资源
     * 使用默认模板创建
     *
     * @param config
     */
    private static void createPagesWithDefault(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createPages();
    }

    /**
     * 构建页面资源
     * 使用自定义模板创建
     *
     * @param config
     */
    private static void createPages(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createPages(VueBuildParams.of()
                        .setTemplateParam(
                                TemplateParam.of()
                                        .setMode(ResourceMode.FILE)
                                        .setRootPath(templateRootPath)
                                        .setResourcePath(templatePaths.page)
                        ));
    }

    /**
     * 构建路由资源
     * 使用默认模板创建
     *
     * @param config
     */
    private static void createRoutersWithDefault(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createRouters();
    }

    /**
     * 构建路由资源
     * 使用自定义模板创建
     *
     * @param config
     */
    private static void createRouters(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createRouters(VueBuildParams.of()
                        .setTemplateParam(
                                TemplateParam.of()
                                        .setMode(ResourceMode.FILE)
                                        .setRootPath(templateRootPath)
                                        .setResourcePath(templatePaths.router)
                        ));
    }

    /**
     * 构建所有资源
     *
     * @param config
     */
    private static void createAllWithDefault(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .createAll();
    }

    /**
     * 构建所有资源
     *
     * @param config
     */
    private static void createAll(Config config) {
        createTypes(config);
        createApis(config);
        createPages(config);
        createRouters(config);
    }

    /**
     * 构建指定资源
     *
     * @param config
     */
    private static void create(Config config) {
        VueBuildManager.get(config)
                .matchTableNamePrefixes(tablePrefix)
                .create("type", "api", "page", "router");
    }
}
